package com.small.common.manager.redis;

import java.util.concurrent.TimeUnit;

/**
 * redis分布式锁
 * @author dingyou
 * @version 1.6
 * @date 2018/11/7
 */
public interface RedisLockService {

    /**
     * 上锁,并返回锁标记
     * @param key
     * @param expire
     * @param timeUnit
     * @return
     */
    String lock(String key, long expire, TimeUnit timeUnit);
    /**
     * 上锁,并返回锁标记
     * @param key
     * @param expire
     * @return
     */
    String lock(String key, long expire);
    /**
     * 上锁,并返回锁标记
     * @param key
     * @return
     */
    String lock(String key);

    /**
     * 上锁,一直等到锁定成功
     * @param key
     * @return
     */
    String waitLocked(String key);

    /**
     * 上锁,一直等到锁定成功
     * @param key
     * @return
     */
    String waitLocked(String key, long expire);

    /**
     * 上锁,一直等到锁定成功
     * @param key
     * @param expire
     * @param timeUnit
     * @return
     */
    String waitLocked(String key, long expire, TimeUnit timeUnit);

    /**
     * 解锁
     * @param key
     * @param lockTag
     */
    boolean unLock(String key, String lockTag);

}
